require([
    "Underscore.Crud", 
    "Acaweb.AjaxRequest",
    "jquery", 
    "init",
    "jQuery.Tools.OverLay",
    ], function(Underscore, Acaweb, $){        
        var index = 1;
        function fila (){ 
            return $("<tr>")
            .append($("<td>").append($("<input>").attr("type","text").attr("class","small number").attr("name","EstudianteNuevo[UniversidadesSolicitadas]["+index+"][Anio]")))
            .append($("<td>").append($("<input>").attr("type","text").attr("class","small").attr("name","EstudianteNuevo[UniversidadesSolicitadas]["+index+"][Nombre]")))
            .append($("<td>").append($("<input>").attr("type","text").attr("class","small").attr("name","EstudianteNuevo[UniversidadesSolicitadas]["+index+"][Programa]")))
            .append($("<td>").append($("<input>").attr("type","text").attr("class","small number").attr("name","EstudianteNuevo[UniversidadesSolicitadas]["+index+"][SemestresCursados]")))
            .append($("<td>").append($("<button>").attr("class","borrarUniversidad small icon i_trashcan").text("Borrar")));
        }
    
    
        $(".agregarUniversidad").live("click",function(){
            $("#universidades tbody").append(fila());
            index = index+1;
            return false;
        });
        
        $('#otroParentesco').hide();
        
        $("#selectParentesco").change(function(){
            if ($(this).val()=='Otro'){
                $('#otroParentesco').show();
                $('#parentesco').val('');
                $('#parentesco').addClass('required');
            }else{
                $('#otroParentesco').hide();
                $('#parentesco').val($(this).val());
                $('#parentesco').removeClass('required');
            }
        });
        
        $('.graduado').hide();
        
        $("#selectGraduado").change(function(){
            if ($(this).val()=='si'){
                $('.graduado').show();
                $('#fechaGraduacion').addClass('required');
                $('#folio').addClass('required');
                $('#libro').addClass('required');
            }else{
                $('.graduado').hide();
                $('#fechaGraduacion').removeClass('required');
                $('#folio').removeClass('required');
                $('#libro').removeClass('required');
            }
        });
    
        $(".borrarUniversidad").live("click",function(){
            $(this).parent().parent().remove();
            return false;
        });
    
        /*OverLay's*/
        $(".add-button, .edit-button, #ayudaPruebasDaber11").overlay({

            // some mask tweaks suitable for modal dialogs
            mask: {
                color: '#ebecff',
                loadSpeed: 200,
                opacity: 0.9
            },

            closeOnClick: false
        });
    
        $.ajaxSetup({
            cache: false
        });
    
        $( ".datepicker" ).datepicker({
            yearRange:"c-50:c+2",
            dateFormat:"yy-mm-dd",
            changeMonth: true,
            changeYear: true
        });
    
        /*Enlace de Ciudades con paises*/
        $.ajaxSetup({
            cache: false
        });
    
        $(".location-country").change(function(){
            var self = $(this);
            var place = self.data("place");
            var state = $('.location-state[data-place="' + place + '"]');
            
            state.html("");
            $('.location-city[data-place="' + place + '"]').html("");
            
            var valor = self.val();
            
            var locaciones = new Acaweb.Locaciones();
                
            locaciones.error = function(){
                    
            }    
            locaciones.success = function(data){
                var departamentos = "<option>- Seleccione -</option>";
                $.each(data, function(k, departamento){
                    departamentos += "<option value='" + departamento.Nombre + "'>";
                    departamentos +=  departamento.Nombre;
                    departamentos += "</option>";
                })
                        
                state.html(departamentos);
            }
                    
            locaciones.GetDepartamento(valor);
        });
                
        $(".location-state").change(function(){
            var self = $(this);
            var place = self.data("place");
            var cities = $('.location-city[data-place="' + place + '"]');
            cities.html("");
            
            var valor = self.val();
            
            var locaciones = new Acaweb.Locaciones();
                
            locaciones.error = function(){
                alert("Boom...!");
            }    
            locaciones.success = function(data){
                var municipios = "<option>- Seleccione -</option>";
                $.each(data, function(k, municipio){
                        
                    municipios += "<option value='" + municipio.CodigoMunicipio + "'>";
                    municipios +=  municipio.Nombre;
                    municipios += "</option>";
                })
                        
                cities.html(municipios);
            }
                    
            locaciones.GetMunicipioByNombreDepartamento(valor);
        });
        
        $("#BarrioField").hide();
        $("#municipioRes").change(function(){
            var self = $(this);
            if(self.val() == "13001"){
                $("#BarrioField").show();
            }else{
                $("#BarrioField").hide();
            }
        });
        
        /************ Manejo de los hijos del estudiante */
        $("#ChildrenList .DeleteChild").live("click", function(){
            $(this).parents("tr").remove();
        });    
                
        $("#ChildrenList #AddChild").live("click", function(){
            lastAddedChild++;
            $("#ChildrenList tbody").append(
                $("<tr>")
                .append($("<td>").append($("<input type='text' />").attr("name", "Hijos[" + lastAddedChild + "][Nombre]")))
                .append($("<td>").append($("<input type='text' class='datepicker'/>").attr("name", "Hijos[" + lastAddedChild + "][FechaNacimiento]")))
                .append($("<td>").append($("<button class='DeleteChild i_trashcan icon small' title='Borrar informacion de este hijo.' >").html("Borrar")))
                );    
            
            $( ".datepicker" ).datepicker({
                yearRange:"c-50:c+2",
                dateFormat:"dd/mm/yy",
                changeMonth: true,
                changeYear: true
            });
        
            return false;
        });

        /************ Informacion laboral del estudiante */
        LaboralData = function(){
            Underscore.Crud.apply(this, arguments);
            this.add = "AddInformacionLaboral";
            this.edit = "EditInformacionLaboral";
            this.Delete = "DeleteInformacionLaboral";
            this.root = $("#Laborales");
        }
        LaboralData.Extend(Underscore.Crud, {
        
            clearForm:function(){
                this.root.find('input[name="HistorialEmpresa[Nombre]"]').val("");
                this.root.find('select[name="HistorialEmpresa[Pais]"]').val("");
                this.root.find('input[name="HistorialEmpresa[Ciudad]"]').val("");
                this.root.find('input[name="HistorialEmpresa[Direccion]"]').val("");
                this.root.find('input[name="HistorialEmpresa[Telefono]"]').val("");
                this.root.find('input[name="HistorialEmpresa[Ocupacion]"]').val("");
                this.root.find('input[name="HistorialEmpresa[FechaIngreso]"]').val("");

                this.root.find('select[name="HistorialEmpresa[Salario]"]').val("");
                this.root.find('select[name="HistorialEmpresa[Naturaleza]"]').val("");
                this.root.find('select[name="HistorialEmpresa[Sector]"]').val("");
            },
        
            doEdit:function(row){
                //Copiar las caracteristicas del empleo que sera editado.
                var NombreEmpresa = row.find('.nombre-empresa').text();
                var Ciudad = row.find('.ciudad-empresa').text();
                var Direccion = row.find('.direccion-empresa').text();
                var Telefono = row.find('.telefono-empresa').text();
                var Ocupacion = row.find('.cargo-empresa').text();
                var Salario = row.find('.salario-empresa').attr("name");
                var FechaIngreso = row.find('.fecha-empresa').text();
                var SectorEmpresa = row.find(".sector-empresa").attr("name");
                var NaturalezaEmpresa = row.find(".naturaleza-empresa").attr("name");
                var PaisEmpresa = row.find(".pais-empresa").attr("name");
            
                this.root.find('input[name="HistorialEmpresa[Nombre]"]').val(NombreEmpresa);
                this.root.find('select[name="HistorialEmpresa[Pais]"]').val(PaisEmpresa);
                this.root.find('input[name="HistorialEmpresa[Ciudad]"]').val(Ciudad);
                this.root.find('input[name="HistorialEmpresa[Direccion]"]').val(Direccion);
                this.root.find('input[name="HistorialEmpresa[Telefono]"]').val(Telefono);
                this.root.find('input[name="HistorialEmpresa[Ocupacion]"]').val(Ocupacion);
                this.root.find('input[name="HistorialEmpresa[FechaIngreso]"]').val(FechaIngreso);

                this.root.find('select[name="HistorialEmpresa[Salario]"]').val(Salario);
                this.root.find('select[name="HistorialEmpresa[Naturaleza]"]').val(NaturalezaEmpresa);
                this.root.find('select[name="HistorialEmpresa[Sector]"]').val(SectorEmpresa);
            },
            save:function(){
                var action = this.root.find(".editor").data("action");
                var data = this.root.find("input, select").serialize();
                this.request.context = this;
                this.request.success = this.onSuccess;
                this.request.invoke(new Underscore.ModuleCall("Acaweb", "ActualizarDatos", action), {
                    "CodigoInterno":codigoInterno
                }, data, "post");
            },
            doDelete:function(pk){
                this.request.context = this;
                this.request.success = this.onSuccess;
                this.request.invoke(new ModuleCall("Acaweb", "ActualizarDatos", this.Delete), pk, "", "post");
            },
            onSuccess:function(result){
                $("#Laborales").html(result);
                $("#Laborales .datepicker").datepicker({
                    yearRange:"c-50:c+2",
                    dateFormat:"dd/mm/yy",
                    changeMonth: true,
                    changeYear: true
                });
                $("#Laborales").validate();
                $(".add-button, .edit-button").overlay();            
            }
        });
        var laboralData = new LaboralData();
        laboralData.prepare();
    
        /************ Informacion academica del estudiante */
        AcademicData = function(){
            Underscore.Crud.apply(this, arguments);
            this.add = "AddInformacionAcademica";
            this.Delete = "DeleteInformacionAcademica";
            this.root = $("#Academicos");
        }
        AcademicData.Extend(Underscore.Crud, {
        
            clearForm:function(){
                this.root.find('input[name="HistorialAcademico[Nombre]"]').val("");
                this.root.find('select[name="HistorialAcademico[NivelPosgrado]"]').val("");
                this.root.find('input[name="HistorialAcademico[TituloRecibido]"]').val("");
                this.root.find('input[name="HistorialAcademico[FechaDeGraduacion]').val("");
            },
        
            save:function(){
                var data = this.root.find("input, select").serialize();
                this.request.context = this;
                this.request.success = this.onSuccess;
                this.request.invoke(new ModuleCall("Acaweb", "ActualizarDatos", this.add), {
                    "CodigoInterno":codigoInterno
                }, data, "post");
            },
            doDelete:function(pk){
                this.request.context = this;
                this.request.success = this.onSuccess;
                this.request.invoke(new ModuleCall("Acaweb", "ActualizarDatos", this.Delete), pk, "", "post");
            },
            onSuccess:function(result){
                $("#Academicos").html(result);
                $("#Academicos .datepicker").datepicker({
                    yearRange:"c-50:c+2",
                    dateFormat:"dd/mm/yy",
                    changeMonth: true,
                    changeYear: true
                });
                $("#Academicos .add-button, #Academicos .edit-button").overlay(); 
                $("#Academicos").validate();
            }
        });
        var academicData = new AcademicData();
        academicData.prepare();
    
        /************ Informacion de idiomas del estudiante */
        LanguagesData = function(){
            Underscore.Crud.apply(this, arguments);
            this.add = "AddInformacionIdiomas";
            this.edit = "EditInformacionIdiomas";
            this.Delete = "DeleteInformacionIdiomas";
            this.root = $("#Idiomas");
        }
        LanguagesData.Extend(Underscore.Crud, {
        
            clearForm:function(){
                this.root.find('select[name="HistorialIdiomas[Codigo]"]').val("1").removeAttr("disabled");
                this.root.find('select[name="HistorialIdiomas[Lee]"]').val("");
                this.root.find('select[name="HistorialIdiomas[Escribe]"]').val("");
                this.root.find('select[name="HistorialIdiomas[Habla]"]').val("");
            },
        
            doEdit:function(row){
                var CodigoIdioma = row.find('.nombre-idioma').attr("name");
                var LeeIdioma = row.find('.lee-idioma').attr("name");
                var EscribeIdioma = row.find('.escribe-idioma').attr("name");
                var HablaIdioma = row.find('.habla-idioma').attr("name");

                this.root.find('select[name="HistorialIdiomas[Codigo]"]').val(CodigoIdioma).attr("disabled", "disabled");
                this.root.find('select[name="HistorialIdiomas[Lee]"]').val(LeeIdioma);
                this.root.find('select[name="HistorialIdiomas[Escribe]"]').val(EscribeIdioma);
                this.root.find('select[name="HistorialIdiomas[Habla]"]').val(HablaIdioma);
            },
            save:function(){
                var action = this.root.find(".editor").data("action");
                var data = this.root.find("input, select").serialize();
            
                this.request.context = this;
                this.request.success = this.onSuccess;
                this.request.invoke(new ModuleCall("Acaweb", "ActualizarDatos", action), {
                    "CodigoInterno":codigoInterno
                }, data, "post");
            },
            doDelete:function(pk){
                this.request.context = this;
                this.request.success = this.onSuccess;
                this.request.invoke(new ModuleCall("Acaweb", "ActualizarDatos", this.Delete), pk, "", "post");
            },
            onSuccess:function(result){
                $("#Idiomas").html(result);
                $("#Idiomas .datepicker").datepicker({
                    yearRange:"c-50:c+2",
                    dateFormat:"dd/mm/yy",
                    changeMonth: true,
                    changeYear: true
                });
                $("#Idiomas").validate();
                $("#Idiomas .add-button, #Idiomas .edit-button").overlay();            
            }
        });
        var languagesData = new LanguagesData();
        languagesData.prepare();

    });